package com.codejoys.monitor.jna;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public interface CANLib extends Library {
    CANLib INSTANCE = Native.load("CanLib", CANLib.class);

    // 测试动态库
    int add(int a, int b, double c, double e);

    int test(int a, int b, byte c, boolean e);

    // 初始化can设备，返回can设备数目
    int InitCanDev();

    // DevIndex:设备索引0
    // 打开CAN控制器正确返回TRUE
    boolean OPenCanDev(int devIndex);

    // DevIndex:设备索引0
    // 关闭CAN控制器正确返回TRUE
    boolean CloseCanDev(int devIndex);

    // 打开电源反馈为0, 如果为0xFFFF则表示错误
    // bFlag =>  1：开   0：关
    // devIndex 设备索引，canIndex，固定为0
    int TurnOnOffModule(int devIndex, int canIndex, int nMonitorID, int nModuleID, int bFlag);

    int SetModuleVoltage(int devIndex, int canIndex, int nMonitorID, int nModuleID, double fVoltage);

    int SetModuleCurrent(int devIndex, int canIndex, int nMonitorID, int nModuleID, double fCurrent);

    int GetModuleVoltage(int devIndex, int canIndex, int nMonitorID, int nModuleID);

    int GetModuleCurrent(int devIndex, int canIndex, int nMonitorID, int nModuleID);
    int GetModuleTemperature(int devIndex, int canIndex, int nMonitorID, int nModuleID);

    // 状态位定义：
    // 0:交流输入过压	1：交流输入欠压	2：交流输入过压脱离	3：无效	4：无效	5：无效
    // 6：直流输出过压	7.直流输出过压关机
    // 8:直流输出欠压	9：风扇故障	    10：无效
    // 11：无效		12：环境温度过温保护	13：无效
    // 14：PFC过温保护1		15：PFC过温保护2
    // 16: DC过温保护1	    17：DC过温保护2	18：原副边通信故障
    // 19：无效		20：原边故障
    // 21：副边故障		22：无效		23：无效
    // 24: 无效		25：开关机状态	26：无效
    // 27：无效		28：无效		29：无效		30：无效		31：无效
    // 0是正常值，故障时相应位为1
    // 不计开关状态，如果其它的位都是0，表示正常
    int GetModuleStatus(int devIndex, int canIndex, int nMonitorID, int nModuleID);

    // 设置高低压输出，flag = 1时设置成高压模式
    int SetModuleHiLoVoltage(int devIndex, int canIndex, int nMonitorID, int nModuleID, int flag);
}